複素函数 $\sqrt{Q(z)}$ の流れの図

コードが汚いことは気にしないで!

複素正則函数 $f(z)$ に対して、実二次元平面におけるベクトル場

$$ (x,y)\mapsto (\mathrm{Re}\,f(x+iy),-\mathrm{Im}\,f(x+iy)) $$

が対応している。そのベクトル場に沿った流れの図を描きたい。

特に特別な形の有理函数 $Q(z)$ に対する $f(z)=\sqrt{Q(z)}$ の流れの図を描きたい。

モチベーションは exact WKB に親しみやすくなること。

$\sqrt{Q(z)}$ の流れの図から Stokes 曲線を見て取ることができる。

https://genkuroki.github.io/documents/201706Iwaki/

In [1]:
using PyPlot
#PyPlot.svg(true) #slow
ae()=axes()[:set_aspect]("equal")
plotstart() = plt[:figure](figsize=(8,8))
function plotvf(z,w)
    r = abs.(w)
    plt[:quiver](real(z),imag(z),real(w./r),-imag(w./r), log.(r))
end
plotstream(z,w) = plt[:streamplot](real(z),imag(z),real(w),-imag(w),
    color="orange", linewidth=0.5, arrowsize=0.01, density=(3,3))
ploto(x,y,c)=plot(x,y,"o",color=c,mew=2)
plotx(x,y,c)=plot(x,y,"x",color=c,mew=2)
Out[1]:
plotx (generic function with 1 method)

例1. $e^{it}\sqrt{Q(z)}=e^{it}\sqrt{(1-z^2)}$ の流れの図

In [2]:
x = [-2:0.2:2;]'
y = x'
z = x .+ y.*im

δ=0.5

for t in -δ:δ:δ

    plotstart()
    title("\$t = $t\$")

    w = exp(im*t)*sqrt.(1-z.^2)
    plotvf(z,w)
    plotstream(z,w)

    #grid("on")
    plotx(1,0,"black")
    plotx(-1,0,"black")
    plot([-1,-2],[0,0],color="blue")
    plot([1,2],[0,0],color="blue")
    ae()

end

例2. $e^{i(\pi/2+t)}\sqrt{Q(z)}=e^{i(\pi/2+t)}\sqrt{\dfrac{1+w}{w^2}}$, $w=z-1$

In [3]:
x = [-0.5:0.1:2.5;]'
y = [-1.5:0.1:1.5;]
z = x .+ y.*im

δ=0.3
θ0=π/2
#θ0=0
#θ=π

for t in -δ:δ:δ

    plotstart()
    θ=θ0+t
    title("\$t = $t\$")

    w = z-1
    w = (1+w)./w.^2
    w = exp(im*θ)*sqrt.(w)
    plotvf(z,w)
    plotstream(z,w)

    #grid("on")
    ploto(1,0,"blue")
    plotx(0,0,"black")
    #plot([1,1.5],[0,0],color="blue")
    ae()

end

例3. $e^{it}\sqrt{Q(z)}=e^{it}\sqrt{\frac{(z-1)(z-2)}{z^3}}$

In [4]:
x = [-2.0:0.1:3.0;]'
y = [-2.0:0.1:2.0;]
z = x .+ y.*im

δ=0.4
#θ0=π/2
θ0=0
#θ=π

for t in -δ:δ:δ

    plotstart()
    θ=θ0+t
    title("\$t = $t\$")

    w = z
    w = (w-1).*(w-2)./w.^3
    w = exp(im*θ)*sqrt.(w)
    
    plotvf(z,w)
    plotstream(z,w)

    #grid("on")
    ploto(0,0,"blue")
    plotx(1,0,"black")
    #plotx(2,0,"black")
    #plot([1,1.5],[0,0],color="blue")
    ae()

end

例4. $e^{i(\pi/2+t)}\sqrt{Q_t(z)}=e^{i(\pi/2+t)}\sqrt{\dfrac{z+1}{z^2}}$ の流れの図

In [5]:
using PyPlot

x=[-1.5:0.05:1.0;]'
y=[-1.0:0.05:1.0;]
z = x .+ im*y
#display(1)

#w0=2*sqrt.(z.+1)+log.((1.-sqrt.(z.+1))./(1.+sqrt.(z.+1)))
v0=sqrt.((z.+1)./z.^2)
#display(2)

for t in -pi/2:pi/20:pi/2
    #display(t)
    
    c=exp(im*(pi/2+t))
    #w=c*w0
    v=c*v0
    #r=abs.(v)

    plt[:figure](figsize=(12,12))
    plt[:xlim](-1.4,0.9)
    plt[:ylim](-0.9,0.9)
    title("\$t = $t\$")
    #plt[:contour](real(z),imag(z),abs(imag.(w)),levels=[0:0.01:0.2;])
    #plt[:quiver](real(z),imag(z),real(v./r),-imag(v./r),log.(r))
    plt[:streamplot](real(z),imag(z),real(v),-imag(v),
        density=(4,4), color="red", linewidth=0.5, arrowsize=0.5)
    plot(0,0,"o",color="black")
    plot(-1,0,"x",color="blue")
    axes()[:set_aspect]("equal")
end
In [ ]: